// 后台服务工作者
// 负责处理粘贴板相关功能

// 全局日志开关，默认开启，测试通过后可关闭
let debugMode = true;

// 日志函数
function log(message, data = null) {
  if (debugMode) {
    const timestamp = new Date().toISOString();
    if (data !== null) {
      console.log(`[${timestamp}] ${message}`, data);
    } else {
      console.log(`[${timestamp}] ${message}`);
    }
  }
}

// 初始化时从存储中获取日志开关状态
chrome.storage.local.get(['debugMode'], function(result) {
  if (result.debugMode !== undefined) {
    debugMode = result.debugMode;
    log("日志开关状态已从存储中恢复", { debugMode });
  } else {
    log("使用默认日志开关状态", { debugMode });
  }
});

// 监听键盘快捷键
chrome.commands.onCommand.addListener((command) => {
  log("检测到快捷键命令", { command });
  
  if (command === "process_clipboard_alt_1") {
    log("执行 拼接内容 功能");
    processClipboardAlt1();
  } else if (command === "reset_clipboard_alt_2") {
    log("执行 重置拼接 功能");
    resetClipboardData();
  }
});

// 保存内容到自定义粘贴板
function saveToCustomClipboard(content) {
  log("保存内容到自定义粘贴板", { content });
  
  // 获取现有的粘贴板历史
  chrome.storage.local.get(['clipboardHistory'], function(result) {
    let history = result.clipboardHistory || [];
    log("获取现有粘贴板历史", { historyLength: history.length });
    
    // 避免重复添加相同内容
    if (!history.includes(content)) {
      history.unshift(content); // 添加到开头
      log("添加新内容到历史记录开头");
      
      // 保持历史记录在合理范围内（最多50条）
      if (history.length > 50) {
        history = history.slice(0, 50);
        log("历史记录超出50条，已截取");
      }
      
      // 保存更新后的历史记录
      chrome.storage.local.set({clipboardHistory: history}, function() {
        log("粘贴板历史记录已保存", { newHistoryLength: history.length });
      });
    } else {
      log("内容已存在，跳过保存");
    }
  });
}

// 从自定义粘贴板复制内容到系统粘贴板
function copyFromCustomClipboard(content) {
  log("从自定义粘贴板复制内容到系统粘贴板", { content });
  
  // 注意：由于浏览器安全限制，我们无法直接写入系统粘贴板
  // 但可以在扩展的上下文中使用剪贴板API
  navigator.clipboard.writeText(content).then(() => {
    log("内容已复制到粘贴板", { content });
  }).catch(err => {
    log("复制失败", { error: err });
  });
}

// 监听来自popup和content script的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  log("收到来自的消息", { action: request.action, sender: sender });
  
  if (request.action === "saveToClipboard") {
    saveToCustomClipboard(request.content);
    sendResponse({status: "success"});
  } else if (request.action === "copyFromClipboard") {
    copyFromCustomClipboard(request.content);
    sendResponse({status: "success"});
  } else if (request.action === "getClipboardHistory") {
    chrome.storage.local.get(['clipboardHistory'], function(result) {
      log("获取粘贴板历史记录", { historyLength: (result.clipboardHistory || []).length });
      sendResponse({history: result.clipboardHistory || []});
    });
    return true; // 保持消息通道开放以进行异步响应
  } else if (request.action === "clearClipboardHistory") {
    chrome.storage.local.set({clipboardHistory: []}, function() {
      log("粘贴板历史记录已清空");
      sendResponse({status: "success"});
    });
  } else if (request.action === "processClipboardAlt1") {
    log("收到处理剪贴板 拼接内容 的消息");
    processClipboardAlt1();
    sendResponse({status: "success"});
  } else if (request.action === "resetClipboardData") {
    log("收到重置剪贴板数据的消息");
    resetClipboardData();
    sendResponse({status: "success"});
  } else if (request.action === "getSavedProductId") {
    chrome.storage.local.get(['savedProductId'], function(result) {
      log("获取保存的商品ID", { savedProductId: result.savedProductId });
      sendResponse({productId: result.savedProductId || "未保存商品ID"});
    });
    return true; // 保持消息通道开放以进行异步响应
  } else if (request.action === "saveTestProductId") {
    chrome.storage.local.set({savedProductId: request.productId}, function() {
      log("测试商品ID已保存", { productId: request.productId });
      sendResponse({status: "success"});
    });
    return true; // 保持消息通道开放以进行异步响应
  } else if (request.action === "clearTestProductId") {
    chrome.storage.local.remove(['savedProductId'], function() {
      log("测试商品ID已清除");
      sendResponse({status: "success"});
    });
    return true; // 保持消息通道开放以进行异步响应
  } else if (request.action === "toggleDebugMode") {
    debugMode = request.debugMode;
    chrome.storage.local.set({debugMode: debugMode}, function() {
      log("日志开关状态已更新", { debugMode });
      sendResponse({status: "success"});
    });
    return true; // 保持消息通道开放以进行异步响应
  } else if (request.action === "getDebugMode") {
    sendResponse({debugMode: debugMode});
  } else if (request.action === "handleClipboardOperation") {
    log("收到处理剪贴板操作的请求，需要弹窗处理");
    // 尝试打开弹窗来处理剪贴板操作
    chrome.action.openPopup();
    sendResponse({status: "success"});
  } else if (request.action === "clipboardDataReset") {
    log("收到剪贴板数据重置通知");
    // 广播重置消息给所有监听者
    chrome.runtime.sendMessage({
      action: "clipboardDataReset"
    });
    sendResponse({status: "success"});
  }
});

// 处理 拼接内容 快捷键逻辑
function processClipboardAlt1() {
  log("收到 拼接内容 快捷键命令，发送消息给内容脚本处理");
  
  // 发送消息给内容脚本处理剪贴板操作
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    if (tabs[0]) {
      chrome.tabs.sendMessage(tabs[0].id, {action: "handleClipboardOperation"}, function(response) {
        if (chrome.runtime.lastError) {
          log("发送消息到内容脚本时出错", { error: chrome.runtime.lastError.message });
          // 如果发送消息失败，尝试通过弹窗处理
          chrome.action.openPopup();
        } else {
          log("已成功发送消息到内容脚本");
        }
      });
    }
  });
}

// 重置数据 (重置拼接)
function resetClipboardData() {
  log("开始重置拼接数据");
  
  chrome.storage.local.remove(['savedProductId'], function() {
    log("已重置保存的商品ID");
    // 通知内容脚本显示重置提示并清空剪贴板
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      if (tabs[0]) {
        chrome.tabs.sendMessage(tabs[0].id, {action: "showResetNotification"}, function(response) {
          if (chrome.runtime.lastError) {
            log("发送重置通知到内容脚本时出错", { error: chrome.runtime.lastError.message });
          }
        });
      }
    });
  });
}